home *** CD-ROM | disk | FTP | other *** search
/ MacHack 1997 / MacHack 1997.toast / Hacks / Hacks ’93 / sort / Source / selection.c < prev    next >
C/C++ Source or Header  |  1993-06-17  |  1KB  |  49 lines

  1. /*
  2.     Selection.c
  3.  
  4.     Author: Paul Baxter.
  5.  
  6.     This is a standard selection sort.
  7.  
  8.     Here is how it works:
  9.  
  10.     1) Start an incrementing loop (index1) from 0 to number of data - 1.
  11.     2) Init lowest to index1 data item.
  12.     3) Start an incrementing loop (index2) from index1 + 1 to number of data.
  13.     4) Compare lowest to index2 data item.
  14.     5) If index2 data item < lowest then set lowest to index2 data item.
  15.     6) End index2 loop.
  16.     7) If lowest != index1 then swap lowest and index1.
  17.     8) End index1 loop.
  18.     9) End.
  19. */ 
  20.  
  21. #include "sortdata.h"
  22.  
  23. void main(long maxdata, long* sortdata, swp sw, cmp cm, short* stopflag);
  24.  
  25. void main(long maxdata, long* sortdata, swp sw, cmp cm, short* stopflag)
  26. {
  27.     long lowest, index1, index2, *pindex1, *pindex2, *plowest;
  28.  
  29.     for (pindex1 = sortdata, index1 = 0; index1 < maxdata - 1; index1++, pindex1++) {
  30.         lowest = index1;
  31.         plowest = pindex1;
  32.         
  33.         for (pindex2 = pindex1+1, index2 = index1 + 1; index2 < maxdata; index2++, pindex2++) {
  34.  
  35.             if (*stopflag) {
  36.                 return;
  37.             }
  38.  
  39.             if ((*cm)(lowest, index2, *plowest, *pindex2) > 0) {
  40.                 plowest = pindex2;
  41.                 lowest = index2;
  42.             }
  43.         }
  44.         if (index1 != lowest) {
  45.             (*sw)(index1, lowest, pindex1, plowest);
  46.         }
  47.     }
  48. }
  49.